/*
 * tabelasimbolo.h
 *
 *  Created on: 13/11/2012
 *      Author: wx
 */

#ifndef TABELASIMBOLO_H_
#define TABELASIMBOLO_H_

class variavel {
private:
	string nome;
	string categoria;
	string tipo;
public:
	variavel();

	string getnome();
	string getcategoria();
	string gettipo();
	void setnome(string);
	void settipo(string);
	void setcategoria(string);
	void setall(string nvnome, string nvcat, string nvtipo);

	void print();
};

class procedimento {

private:
	string nome;
	string categoria;
	vector<variavel> localvar;
	vector<variavel> parametros;
public:
	procedimento();

	bool jaexistelocal(variavel);
	int buscarlocal(variavel);
	bool jaexisteparam(variavel);
	int buscarparam(variavel);

	string getnome();
	string getcategoria();

	void setnome(string);
	void setcategoria(string);
	void addlocalvar(variavel);
	void addparametros(variavel);

	void print();
};

class tabelasimbolo {
private:
	vector<variavel> globalvar;
	vector<procedimento> procedimentos;
	void addglobalvar(variavel);
public:
	tabelasimbolo();
	string destino;
	vector<string> contexto;

	int buscarproced(string);
	int buscarglobal(string);

	void addvar(variavel);
	void addprocedimento(procedimento);

	void addcontext(string);
	void popcontext();

	void erro(string obj, string probl);
	void erro(string obj);

	void print();
};

#endif /* TABELASIMBOLO_H_ */
